60806040526000600581905560068190556007556008805460ff60201b19166401000000001790553480156200003457600080fd5b50620000403262000046565b62000262565b6200005181620000b3565b60408051808201909152600b81526a587472656d65766572736560a81b602082015260009062000082908262000196565b50604080518082019091526006815265585452454d4560d01b6020820152600190620000af908262000196565b5050565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011a57607f821691505b6020821081036200013b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000191576000816000526020600020601f850160051c810160208610156200016c5750805b601f850160051c820191505b818110156200018d5782815560010162000178565b5050505b505050565b81516001600160401b03811115620001b257620001b2620000ef565b620001ca81620001c3845462000105565b8462000141565b602080601f831160018114620002025760008415620001e95750858301515b600019600386901b1c1916600185901b1785556200018d565b600085815260208120601f198616915b82811015620002335788860151825594840194600190910190840162000212565b5085821015620002525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613f0080620002726000396000f3fe6080604052600436106102535760003560e01c80636817c76c11610138578063beab5db6116100b0578063dd62ed3e1161007f578063f2fde38b11610064578063f2fde38b14610b4d578063f5b100ea14610b60578063fee81cf414610b8057610265565b8063dd62ed3e14610afb578063f04e283e14610b3a57610265565b8063beab5db614610a6e578063bf598e1e14610a8e578063c4d66de814610abb578063c87b56dd14610adb57610265565b80638da5cb5b11610107578063a2309ff8116100ec578063a2309ff814610a1e578063a9059cbb14610a3b578063b61c5e6914610a5b57610265565b80638da5cb5b146109d557806395d89b4114610a0957610265565b80636817c76c1461091c57806370a0823114610954578063715018a6146109b85780638456cb59146109c057610265565b8063313ce567116101cb5780633f4ba83a1161019a57806354d1f13d1161017f57806354d1f13d146108d257806355f804b3146108da5780635c975abb146108fa57610265565b80633f4ba83a146108835780634ef41efc1461089857610265565b8063313ce5671461081c57806332cb6b0c14610838578063359010181461084e5780633ccfd60b1461086e57610265565b806318160ddd11610222578063256929621161020757806325692962146107d4578063274e430b146107dc5780632a6a935d146107fc57610265565b806318160ddd1461076757806323b872dd146107b457610265565b806306fdde03146106c2578063095ea7b3146106ed5780630f2cdd6c1461071d5780630f65b54c1461074757610265565b3661026557341561026357600080fd5b005b68a20d6e21d0e52553095468a20d6e21d0e52553089060003560e01c906001600160a01b031663e5eb36c88290036102f757336001600160a01b038216146102d9576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ed600435602435604435606435610bb3565b6102f76001610c3f565b8163813500fc0361036157336001600160a01b03821614610344576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103576004356024351515604435610c49565b6103616001610c3f565b8163e985e9c5036103d857336001600160a01b038216146103ae576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602435602890815260043560145260038401600090815260488120915280546103d690610c3f565b505b81636352211e0361044157336001600160a01b03821614610425576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610441610433600435610cec565b6001600160a01b0316610c3f565b8163243598790361049c57336001600160a01b0382161461048e576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049c610433600435610d3c565b8163d10b6e0c0361051257336001600160a01b038216146104e9576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006104fc600435602435604435610dc3565b9050610510816001600160a01b0316610c3f565b505b8163081812fc0361056d57336001600160a01b0382161461055f576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61056d610433600435610e4e565b8163f5b100ea0361060057336001600160a01b038216146105ba576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0360043516600090815268a20d6e21d0e5255313602052604090205461060090700100000000000000000000000000000000900463ffffffff16610c3f565b8163e2c792810361067b57336001600160a01b0382161461064d576040517fce5a776b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b68a20d6e21d0e52553085461067b90700100000000000000000000000000000000900463ffffffff16610c3f565b8163b7a94eb803610690576106906001610c3f565b6040517f3c10b94e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156106ce57600080fd5b506106d7610eb3565b6040516106e491906137c1565b60405180910390f35b3480156106f957600080fd5b5061070d610708366004613829565b610f45565b60405190151581526020016106e4565b34801561072957600080fd5b50610732600181565b60405163ffffffff90911681526020016106e4565b34801561075357600080fd5b50610263610762366004613853565b610f5b565b34801561077357600080fd5b5068a20d6e21d0e5255308547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff165b6040519081526020016106e4565b3480156107c057600080fd5b5061070d6107cf36600461387f565b610f71565b610263610ff8565b3480156107e857600080fd5b5061070d6107f73660046138bb565b611048565b34801561080857600080fd5b5061070d6108173660046138d6565b6110a7565b34801561082857600080fd5b50604051601281526020016106e4565b34801561084457600080fd5b50610732610bb881565b34801561085a57600080fd5b50610263610869366004613927565b6110bb565b34801561087a57600080fd5b506102636111b0565b34801561088f57600080fd5b506102636111c3565b3480156108a457600080fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b0390911681526020016106e4565b6102636111f5565b3480156108e657600080fd5b506102636108f5366004613a10565b611231565b34801561090657600080fd5b5060085461070d90640100000000900460ff1681565b34801561092857600080fd5b5061093766d529ae9e86000081565b6040516bffffffffffffffffffffffff90911681526020016106e4565b34801561096057600080fd5b506107a661096f3660046138bb565b6001600160a01b0316600090815268a20d6e21d0e525531360205260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1690565b610263611246565b3480156109cc57600080fd5b50610263611258565b3480156109e157600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927546108ba565b348015610a1557600080fd5b506106d7611291565b348015610a2a57600080fd5b506008546107329063ffffffff1681565b348015610a4757600080fd5b5061070d610a56366004613829565b6112a0565b610263610a69366004613a82565b6112ad565b348015610a7a57600080fd5b50610263610a89366004613b10565b611646565b348015610a9a57600080fd5b50610aae610aa9366004613b32565b611659565b6040516106e49190613b65565b348015610ac757600080fd5b50610263610ad63660046138bb565b611666565b348015610ae757600080fd5b506106d7610af6366004613ba9565b61167d565b348015610b0757600080fd5b506107a6610b16366004613bc2565b602890815260149190915268a20d6e21d0e525530f60009081526048812091525490565b610263610b483660046138bb565b6116c6565b610263610b5b3660046138bb565b611703565b348015610b6c57600080fd5b506107a6610b7b3660046138bb565b61172a565b348015610b8c57600080fd5b506107a6610b9b3660046138bb565b63389a75e1600c908152600091909152602090205490565b600854640100000000900460ff1615610c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f506175736564000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b610c398484848461176a565b50505050565b8060005260206000f35b600854640100000000900460ff1615610cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f50617573656400000000000000000000000000000000000000000000000000006044820152606401610c24565b610ce7838383602892835260145268a20d6e21d0e525530b600090815260488120925215159055565b505050565b6000610cf782611c68565b610d2d576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3682610d3c565b92915050565b600068a20d6e21d0e525530868a20d6e21d0e525530a82610d9c68a20d6e21d0e5255312610d78640100000000881088025b6000190160011b90565b60008160031c8360601b0180546007841660051b1c63ffffffff1691505092915050565b63ffffffff1681526020810191909152604001600020546001600160a01b03169392505050565b600854600090640100000000900460ff1615610e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f50617573656400000000000000000000000000000000000000000000000000006044820152606401610c24565b610e46848484611c85565b949350505050565b6000610e5982611c68565b610e8f576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600090815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b606060008054610ec290613bf5565b80601f0160208091040260200160405190810160405280929190818152602001828054610eee90613bf5565b8015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b5050505050905090565b6000610f52338484611dae565b50600192915050565b610f63611e2e565b600592909255600655600755565b336028908152601484905268a20d6e21d0e525530f6000908152604881209181905281549091906000198114610fe15780841115610fdb576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83810382555b610fec868686611e64565b50600195945050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6001600160a01b038116600090815268a20d6e21d0e52553136020526040812080546b0100000000000000000000009004600116820361108c57823b5b9392505050565b546b0100000000000000000000009004600216151592915050565b60006110b33383611ee4565b506001919050565b6110c3611e2e565b60008251826110d29190613c77565b6008549091506000906110ec90839063ffffffff16613c8e565b9050610bb881111561112a576040517f7be9badb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff831617905560005b84518110156111a9576111a185828151811061117b5761117b613ca1565b6020026020010151611192670de0b6b3a764000090565b61119c9087613c77565b611f8d565b60010161115d565b5050505050565b6111b8611e2e565b6111c133612491565b565b6111cb611e2e565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff169055565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b611239611e2e565b6002610ce7828483613d18565b61124e611e2e565b6111c160006124ad565b611260611e2e565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179055565b606060018054610ec290613bf5565b6000610f52338484611e64565b66d529ae9e86000034146112ec576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815268a20d6e21d0e525531360205260408120546affffffffffffffffffffff169061131d826001613c8e565b9050600181111561135a576040517f201dc6f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815268a20d6e21d0e52553136020526040902080547fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000166affffffffffffffffffffff83161790556008546000906113bd9063ffffffff166001613c8e565b9050610bb88111156113fb576040517f7be9badb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff831617905560ff861660000361150857600554421015611472576040517fbaf13b3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526000906034016040516020818303038152906040528051906020012090506114cc868660035484612506565b611502576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50611627565b8560ff166001036115a95760065442101561154f576040517fbaf13b3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526000906034016040516020818303038152906040528051906020012090506114cc868660045484612506565b8560ff166002036115f5576007544210156115f0576040517fbaf13b3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611627565b6040517f201dc6f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61163e3361119c670de0b6b3a76400006001613c77565b505050505050565b61164e611e2e565b600391909155600455565b6060610e46848484612540565b61166e611e2e565b61167a60008083612600565b50565b60606002805461168c90613bf5565b1590506116c157600261169e83612870565b6040516020016116af929190613df6565b60405160208183030381529060405290505b919050565b6116ce611e2e565b63389a75e1600c52806000526020600c2080544211156116f657636f5e88186000526004601cfd5b6000905561167a816124ad565b61170b611e2e565b8060601b61172157637448fbae6000526004601cfd5b61167a816124ad565b6001600160a01b038116600090815268a20d6e21d0e52553136020526040812054700100000000000000000000000000000000900463ffffffff16610d36565b6001600160a01b0383166117aa576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b03166117d257600080fd5b600a81016002820160006117f283610d7864010000000089108902610d6e565b63ffffffff1681526020810191909152604001600020546001600160a01b0387811691161461184d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600160a01b0316836001600160a01b0316146118dc5760288381526014879052600383016000908152604881209152546000036118dc5760008481526004830160205260409020546001600160a01b038481169116146118dc576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006118e7876128d2565b905060006118f4876128d2565b6001600160a01b038916600090815260088601602081905260409091208454929350670de0b6b3a7640000927401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1680841115611980576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85546bffffffffffffffffffffffff918590038216740100000000000000000000000000000000000000009081026001600160a01b039283161788558654818104841687019093160291161784556005870160601b60088a901c015460ff8a161c60011615611a3a576005870160601b60088a901c018054600160ff8c161b191690556000898152600488016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b84547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff81167001000000000000000000000000000000009182900463ffffffff90811660001901808216909302919091178755606083901b631fffffff600384901c16015460009260e060059190911b161c1690506000611ac5886000198d01600190811b01610d78565b606084901b631fffffff600383901c1601805460e0600584901b1681811c861863ffffffff16901b1890559050611b338860001963ffffffff851601600190811b01838160031c8360601b016007831660051b815480821c841863ffffffff16821b81188355505050505050565b50508354600163ffffffff7001000000000000000000000000000000008084048216928301909116027fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9092169190911785556001600160a01b038b166000908152602084905260409020611bcf90828c8160031c8360601b016007831660051b815480821c841863ffffffff16821b81188355505050505050565b611c22878b611bde888f61295d565b84600183038060021c8560601b0180546003831660061b92508463ffffffff168460201b178082851c1867ffffffffffffffff16841b821883555050505050505050565b50826000528960601b60601c8b60601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206000a35050505050505050505050565b600080611c7483610d3c565b6001600160a01b0316141592915050565b600068a20d6e21d0e525530868a20d6e21d0e525530a82611cbb68a20d6e21d0e5255312610d7864010000000089108902610d6e565b63ffffffff1681526020810191909152604001600020546001600160a01b03908116925083168214611d3a576028838152601483905260038201600090815260488120915254600003611d3a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600482016020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387169081179091556005820160601b600886901c018054600160ff881690811b1991909116921515901b919091179055509392505050565b600854640100000000900460ff1615611e23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f50617573656400000000000000000000000000000000000000000000000000006044820152606401610c24565b610ce7838383612a4d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146111c1576382b429006000526004601cfd5b600854640100000000900460ff1615611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f50617573656400000000000000000000000000000000000000000000000000006044820152606401610c24565b610ce7838383612aaf565b6000611eef836128d2565b80549091506b0100000000000000000000009004600216151582151514611f5557805460ff6b0100000000000000000000008083048216600218909116027fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff9091161781555b8115156000528260601b60601c7fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360206000a2505050565b6001600160a01b038216611fcd576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611fd8836128d2565b68a20d6e21d0e52553095490915068a20d6e21d0e5255308906001600160a01b031661200357600080fd5b60408051608081018252600080825260208201819052918101829052606081019190915282546bffffffffffffffffffffffff7401000000000000000000000000000000000000000080830482168701918216026001600160a01b03909216919091178455670de0b6b3a7640000810460408301525081546001600160a01b03811674010000000000000000000000000000000000000000918290046bffffffffffffffffffffffff9081168701908116909202178355600090816120df606083901c670de0b6b3a7640000840463fffffffe10171515151590565b905086821081171561211d576040517fe5cfe95700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508454670de0b6b3a764000090910491506b0100000000000000000000009004600216600003612454576001600160a01b03861660009081526008840160205260408082208654918501519092600a870192700100000000000000000000000000000000900463ffffffff169161219a90838103908410026135df565b905080604001515160001461244f5760608a901b602082015260408082015151885463ffffffff7001000000000000000000000000000000008083048216909301811683027fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff928316178b55928901518b5493169091029116178855612220888b61295d565b63ffffffff908116606088015287546c01000000000000000000000000810482166020890152640100000000810482168781118015909102178852680100000000000000009004165b6000876020015163ffffffff168263ffffffff16146122b8576009890160601b631fffffff600384901c160154600183019260e060059190911b161c63ffffffff1663ffffffff169050612312565b5086515b6122cd85600019830160011b610d78565b63ffffffff1615612302576122fb6122ef8a600601836001018a600101613626565b88811180159091021790565b90506122bc565b6001810187811180159091021788525b600881901c60068a0160601b018054600160ff84161b8019909116179055600384901c606087901b018054600586901b60e01681811c841863ffffffff16901b1890556123a985828a6060015187806001019850600183038060021c8560601b0180546003831660061b92508463ffffffff168460201b178082851c1867ffffffffffffffff16841b821883555050505050505050565b8251602080850151600884901b1782520183525086604001518303612269578651885463ffffffff83811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff9190931664010000000002167fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff90911617178855600188015461244d9083906001600160a01b031661370d565b505b505050505b60008581526001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082a3505050505050565b60003860003847855af161167a5763b12d13eb6000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392780546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60008315612538578360051b8501855b803580851160051b948552602094851852604060002093018181106125165750505b501492915050565b6001600160a01b038316600090815268a20d6e21d0e52553106020908152604080832068a20d6e21d0e5255313909252918290205491519168a20d6e21d0e52553089190700100000000000000000000000000000000900463ffffffff168481118582180218855b818110156125e4578060031c8360601b0180546007831660051b1c63ffffffff1690508088830360051b602088010152506001810190506125a8565b9590950380845260051b83016020016040525090949350505050565b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b031615612656576040517fead4d2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216612696576040517f39a84a7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b630f4599e560005233602052602060006024601c6000865af1600160005114166126c85763d125259c6000526004601cfd5b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000001781556001810180546001600160a01b0384167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790558315610c39576001600160a01b038316612772576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606084901c670de0b6b3a7640000850463fffffffe1017156127c0576040517fe5cfe95700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160a01b0316740100000000000000000000000000000000000000006bffffffffffffffffffffffff86160217815560006127ff846128d2565b80546bffffffffffffffffffffffff871674010000000000000000000000000000000000000000026001600160a01b0391821617825560008781529192508516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082a36111a9846001611ee4565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a90048061288b5750508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b6001600160a01b038116600090815268a20d6e21d0e525531360205260408120805490916b01000000000000000000000090910460011690036116c15780547fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000060ff933b1515600202600117939093169290920291909117815590565b81546c01000000000000000000000000900463ffffffff1668a20d6e21d0e52553086000829003612a465780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008116600163ffffffff92831601918216908117835585547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000082021786556000818152600284016020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161790559193509003612a4657600080fd5b5092915050565b6028828152601484905268a20d6e21d0e525530f600090815260488120915281905560008181526001600160a01b0380841691908516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a3505050565b6001600160a01b038216612aef576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612afa846128d2565b90506000612b07846128d2565b68a20d6e21d0e52553095490915068a20d6e21d0e5255308906001600160a01b0316612b3257600080fd5b612ba9604051806101a0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff16815260200160008152602001600063ffffffff1681525090565b835463ffffffff700100000000000000000000000000000000808304821660808501528554041660a083015282546bffffffffffffffffffffffff7401000000000000000000000000000000000000000091829004811660c085015291041660408201819052851115612c48576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040810180518690039081905284546bffffffffffffffffffffffff918216740100000000000000000000000000000000000000009081026001600160a01b03928316178755855481810484168901606086018190529093160291161783556080810151612cdb90612cbf670de0b6b3a764000090565b836040015181612cd157612cd1613e9b565b0480821191030290565b815282546b0100000000000000000000009004600216600003612d5257856001600160a01b0316876001600160a01b031603612d1f57805160808201510360a08201525b612d4c670de0b6b3a7640000826060015181612d3d57612d3d613e9b565b048260a0015180821191030290565b60208201525b6000612d7f8260800151612d7484600001518560200151808218908211021890565b808218908211021890565b905080600003612d8f5750612ff8565b8151819003825260208201805182900390526001600160a01b0380881690891603612dc45760a0820180519091019052612ff8565b604080516080810182526000808252602080830182815283850183815260608086019081528651888152600589901b81018501885290819052908d9052908d9052810183526001600160a01b03808d16835260088801909152838220908b168252929020909190612e35878b61295d565b63ffffffff1661014086015260a08501515b6080860180516000190190819052600381901c606085901b015460009160051b60e0161c63ffffffff16606084901b600384901c01805460e0600586901b1681811c63ffffffff948516908118909416901b1890559050612ef688600a018289610140015185806001019650600183038060021c8560601b0180546003831660061b92508463ffffffff168460201b178082851c1867ffffffffffffffff16841b821883555050505050505050565b84518181526020018552600881901c6005890160601b015460ff82161c60011615612f6c576005880160601b600882901c018054600160ff84161b191690556000818152600489016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b50600019850194600003600101612e475760a08601819052875463ffffffff8083167001000000000000000000000000000000009081027fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff938416178b5560808901518c5492160291161789556001870154612ff29085906001600160a01b0316613749565b50505050505b80516020820151835463ffffffff7001000000000000000000000000000000008083048216840185900360e08701819052909116027fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff909116178455600a84019160009161306691016135df565b84546c01000000000000000000000000900463ffffffff166101808501528351909150156132af57606089901b6001176020828101919091526001600160a01b038a16600090815260088601909152604081206080850151855181036101008701819052895463ffffffff909116700100000000000000000000000000000000027fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9091161789556101808601515b60001991909101600381901c606084901b0154909190600090600584901b60e0161c63ffffffff1663ffffffff166000198101600281901c60608a901b01805460069290921b60c01682811c67ffffffffffffffff16901b909118905590508551602080880151600884901b1782520186526001156131a9576006890160601b600882901c018054600160ff84161b191690555b84156131e3576009890160601b631fffffff600384901c1601805460e0600585901b1681811c841863ffffffff16901b1890556001909101905b600881901c60058a0160601b015460ff82161c6001161561324f576005890160601b600882901c018054600160ff84161b19169055600081815260048a016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b5086610100015182036131155783156132aa5763ffffffff8116610180880181905288547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009091021788555b505050505b60208301511561357857606088901b60208201526001600160a01b038816600090815260088501602052604090206132e7868a61295d565b63ffffffff166101408501526000670de0b6b3a76400008560c001518161331057613310613e9b565b87549190049150640100000000900463ffffffff1681811180159091021761016086015260a085015160208601518101610120870181905288547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000063ffffffff928316021789558754680100000000000000009004165b600087610180015163ffffffff168263ffffffff16146133ea576009890160601b631fffffff600384901c160154600183019260e060059190911b161c63ffffffff1663ffffffff16905061344c565b506101608701515b61340387600019830160011b610d78565b63ffffffff1615613438576134316134258a6006018360010187600101613626565b85811180159091021790565b90506133f2565b600181018481118015909102176101608901525b600881901c60068a0160601b018054600160ff84161b8019909116179055600383901c606086901b018054600585901b60e01681811c841863ffffffff16901b1890556134e487828a610140015186806001019750600183038060021c8560601b0180546003831660061b92508463ffffffff168460201b178082851c1867ffffffffffffffff16841b821883555050505050505050565b8551602080880151600884901b17825201865250866101200151820361339a57875461016088015163ffffffff908116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff919093166801000000000000000002167fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff909116171787555050505b6040810151511561359c57600184015461359c9082906001600160a01b031661370d565b5050846000528560601b60601c8760601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206000a350505050505050565b61360360405180606001604052806000815260200160008152602001606081525090565b604051828152806020018360051b81016040528183604001528083525050919050565b6000801990508360601b8360081c81018054198560ff161c8560ff161b8061367b578460081c83015b600183019250825419915080831182171561364f57808311156136795760ff86191691821b90911c905b505b80156137035782820360081b7e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405821960010183166fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1790811c63d76453e004601f169190911a171785811015878210176000031793505b5050509392505050565b60408201516040810363263c69d68152602080820152815160051b604401915060208183601c84016000875af1600182511416610c3957600081fd5b6060820151805160051b60840160808203915063144027d3825283602001518460400151816020850152806040850152505060608083015260208282601c85016000875af1600183511416610c3957600082fd5b60005b838110156137b85781810151838201526020016137a0565b50506000910152565b60208152600082518060208401526137e081604085016020870161379d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b80356001600160a01b03811681146116c157600080fd5b6000806040838503121561383c57600080fd5b61384583613812565b946020939093013593505050565b60008060006060848603121561386857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561389457600080fd5b61389d84613812565b92506138ab60208501613812565b9150604084013590509250925092565b6000602082840312156138cd57600080fd5b61108582613812565b6000602082840312156138e857600080fd5b8135801515811461108557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561393a57600080fd5b823567ffffffffffffffff8082111561395257600080fd5b818501915085601f83011261396657600080fd5b813560208282111561397a5761397a6138f8565b8160051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811086821117156139bd576139bd6138f8565b6040529283528183019350848101820192898411156139db57600080fd5b948201945b83861015613a00576139f186613812565b855294820194938201936139e0565b9997909101359750505050505050565b60008060208385031215613a2357600080fd5b823567ffffffffffffffff80821115613a3b57600080fd5b818501915085601f830112613a4f57600080fd5b813581811115613a5e57600080fd5b866020828501011115613a7057600080fd5b60209290920196919550909350505050565b600080600060408486031215613a9757600080fd5b833560ff81168114613aa857600080fd5b9250602084013567ffffffffffffffff80821115613ac557600080fd5b818601915086601f830112613ad957600080fd5b813581811115613ae857600080fd5b8760208260051b8501011115613afd57600080fd5b6020830194508093505050509250925092565b60008060408385031215613b2357600080fd5b50508035926020909101359150565b600080600060608486031215613b4757600080fd5b613b5084613812565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b81811015613b9d57835183529284019291840191600101613b81565b50909695505050505050565b600060208284031215613bbb57600080fd5b5035919050565b60008060408385031215613bd557600080fd5b613bde83613812565b9150613bec60208401613812565b90509250929050565b600181811c90821680613c0957607f821691505b602082108103613c42577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610d3657610d36613c48565b80820180821115610d3657610d36613c48565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f821115610ce7576000816000526020600020601f850160051c81016020861015613cf95750805b601f850160051c820191505b8181101561163e57828155600101613d05565b67ffffffffffffffff831115613d3057613d306138f8565b613d4483613d3e8354613bf5565b83613cd0565b6000601f841160018114613d785760008515613d605750838201355b600019600387901b1c1916600186901b1783556111a9565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613dc75786850135825560209485019460019092019101613da7565b5086821015613de45760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000808454613e0481613bf5565b60018281168015613e1c5760018114613e4f57613e7e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450613e7e565b8860005260208060002060005b85811015613e755781548a820152908401908201613e5c565b50505082870194505b505050508351613e9281836020880161379d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220bcfc91bec3eaa4b896cf18e073c703b77253ccea6fcd197f949c32fae279a6a164736f6c63430008180033